package com.sz.biz.logistics.core.service;

import com.sz.biz.logistics.core.entity.Service;
import com.sz.biz.logistics.core.dto.ServiceDto;
import com.sz.biz.logistics.core.dto.ServiceRegionObjDto;
import com.sz.common.base.dto.CommonModel;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * Function: 服务service <br>
 * Author: wentao.chang <br>
 * Date: 2017-02-15 16:08:00
 */
public interface ServiceService {
    /**
     * 新增主信息
     *
     * @param service 新增主信息
     * @return
     */
    String save(ServiceDto service) throws ParseException;

    /**
     * 修改主信息
     *
     * @param service 修改主信息
     * @return
     */
    String update(String uid, ServiceDto service,boolean isFromAudit) throws ParseException;


    /**
     * 根据uid上线服务
     *
     * @param uids uids
     */
    void online(List<String> uids) throws ParseException;

    /**
     * 根据uid下线服务
     *
     * @param uids uids
     */
    void offline(List<String> uids,boolean isConfirmed) throws ParseException;


    /**
     * 根据uids删除实体
     *
     * @param uids uid集合
     */
    void batchdelete(List<String> uids);

    /**
     * 根据uid查询可用生效的实体
     *
     * @param uid uid
     * @return 查询出来的实体对象
     */
    ServiceDto findDtoActivedByUid(String uid);

    /**
     * 根据uid查询可用生效的实体对象
     *
     * @param uid
     * @return
     */
    Service findActivedByUid(String uid);

    /**
     * 根据uids查询可用生效的实体
     *
     * @param uids uids
     * @return 查询出来的实体对象
     */
    List<Service> findActivedByUids(List<String> uids);

    Service findByUid(String uid, Boolean isDeleted);

    /**
     * 根据主键Id查询单个实体
     *
     * @param id 主键id
     * @return 查询出来的实体对象
     */
    Service findById(Integer id);

    /**
     * 根据uid查询可用生效的实体
     *
     * @param uid  uid
     * @param time 时间点
     * @return 查询出来的实体对象
     */
    ServiceDto findByUidAndTime(String uid, Date time);

    /**
     * 根据uids查询可用生效的实体
     *
     * @param uids uids
     * @param time 时间点
     * @return 查询出来的实体对象
     */
    List<Service> findByUidsAndTime(List<String> uids, Date time);

    /**
     * 根据条件查询实体
     *
     * @param params 查询的参数集
     * @return 查询出的数据
     */
    QResultDto findByFilter(QueryParams params);

    /**
     * 根据serviceUids获取服务
     *
     * @param serviceUids
     * @return 数据集合
     */
    List<CommonModel> findActivedByServiceUidList(List<String> serviceUids);


    /**
     * 异步校验服务名称
     *
     * @param uid
     * @param name
     * @return
     */
    void nameCheck(String uid, String name);

    /**
     * 异步校验服务编码
     *
     * @param uid
     * @param code
     * @return
     */
    void codeCheck(String uid, String code);

    /**
     * 提交服务
     */
    void submit(List<String> uids) throws ParseException;

    /**
     * 审核服务
     */
    void audit(List<String> uids, String msg) throws ParseException;

    /**
     * 打回服务
     */
    void reject(List<String> uids, String msg);

    /**
     * h获取服务的详细信息
     * @param uid
     * @return
     */
    ServiceRegionObjDto findServiceRegionsByUid(String uid);
}
